home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Internet / WWW / httpd_1.5.export / support / dbm2std.c < prev    next >
C/C++ Source or Header  |  1995-11-09  |  2KB  |  73 lines

  1. /*
  2.  * dbm2std.c: simple program to convert the dbm type access files to
  3.  *            the traditional flat access type files.
  4.  * 
  5.  *  6-8-95    Written by Stanford S. Guillory 
  6.  */
  7.  
  8. #include "config.h"
  9. #include "portability.h"
  10.  
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include <fcntl.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <stdlib.h>
  17. #include <ndbm.h>
  18.  
  19. #define MAX_STRING_LEN 256
  20.  
  21. void usage(char* s) 
  22. {
  23.     fprintf(stderr,"Usage: %s dbm-file flat-file\n", s);
  24.     exit(1);
  25. }
  26.  
  27. int main (int argc, char *argv[]) 
  28. {
  29.     FILE *std_fp;
  30.     DBM  *db;
  31.     datum dtKey, dtRec;
  32.     char rec[MAX_STRING_LEN];
  33.     char key[MAX_STRING_LEN];
  34.     char *pch1, *pch2;
  35.     int  ndx;
  36.  
  37.     if (argc != 3) 
  38.     usage(argv[0]);
  39.  
  40.     if (!(std_fp = fopen(argv[2], "w"))) {
  41.     fprintf(stderr,"Could not open file %s for writing.\n",
  42.         argv[2]);
  43.     perror("fopen");
  44.     exit(1);
  45.     }
  46.  
  47.     if (!(db = dbm_open (argv[1], O_RDONLY, 0))) {
  48.     fprintf(stderr,"Could not open database file %s.\n", argv[1]);
  49.         exit(0);
  50.     }
  51.  
  52.     for (dtKey = dbm_firstkey(db); dtKey.dptr; dtKey = dbm_nextkey(db)) {
  53.     dtRec = dbm_fetch (db, dtKey);
  54.  
  55.     pch1 = key;
  56.     for (ndx = 0; ndx < dtKey.dsize; ndx++)
  57.         *pch1++ = dtKey.dptr[ndx];
  58.     *pch1 = '\0';
  59.  
  60.     pch2 = rec;
  61.     for (ndx = 0; ndx < dtRec.dsize; ndx++)
  62.         *pch2++ = dtRec.dptr[ndx];
  63.     *pch2 = '\0';
  64.  
  65.     printf ("Storing data <%s> with key <%s>\n",
  66.         rec, key);
  67.     if (strchr (rec, ' '))
  68.         fprintf (std_fp,"%s: %s\n", key, rec);
  69.     else
  70.         fprintf (std_fp,"%s:%s\n", key, rec);
  71.     }
  72. }
  73.